﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using T.FAS.Runtime.Base.Entity;

namespace T.FAS.Runtime.Metadata.Entity.DataModel
{
    /// <summary>
    /// 规则定义
    /// </summary>
    public class TRuleContent : ICloneable
    {
        /// <summary>
        /// 主键id
        /// </summary>
        public string ID { get; set; }

        /// <summary>
        /// 所属状态机ID
        /// </summary>
        [JsonIgnore]
        public string StateMachineID { get; set; }

        /// <summary>
        /// 所属状态ID
        /// </summary>
        [JsonIgnore]
        public string StateID { get; set; }

        /// <summary>
        /// 所属规则ID
        /// </summary>
        [JsonIgnore]
        public string RuleID { get; set; }

        /// <summary>
        /// 0:System, 1:Expression
        /// </summary>
        public RuleType RuleType { get; set; }

        /// <summary>
        ///  RuleType:System时，RuleInfo存储系统预置的默认规则标识（Frozen,Match,Required）;
        ///  RuleType:Expression时，RuleInfo存储表达式规则的内容（展示用），该表达式执行结果返回Boolean类型的值
        /// </summary>
        public string RuleInfo { get; set; }

        /// <summary>
        /// 当RuleType:Expression时，存储表达式的Json内容（真正执行用），供表达式SDK使用
        /// </summary>
        public string RuleInfoJson { get; set; }

        ///// <summary>
        ///// RuleType:Expression时，存储条件表达式参数Json内容
        ///// RuleType:System时，存储需要参数的系统条件的参数Json内容
        ///// </summary>
        //public string ParameterString { get; set; }

        /// <summary>
        /// 创建人
        /// </summary>
        [JsonIgnore]
        public string Creator { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>        
        [JsonIgnore]
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 最后修改人
        /// </summary>
        [JsonIgnore]
        public string LastModifier { get; set; }

        /// <summary>
        /// 最后修改时间
        /// </summary>     
        [JsonIgnore]
        public DateTime LastModifyTime { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sort { get; set; }

        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }
}
